package com.smart.community.commons.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.smart.community.commons.dto.SystemLogQueryDTO;
import com.smart.community.commons.entity.SystemLog;
import com.smart.community.commons.result.PageResult;

import java.util.List;

/**
 * 系统日志Service接口
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 */
public interface SystemLogService extends IService<SystemLog> {
    
    /**
     * 分页查询系统日志
     * 
     * @param queryDTO 查询条件
     * @return 分页结果
     * @throws Exception 统一异常
     */
    PageResult<SystemLog> getSystemLogPage(SystemLogQueryDTO queryDTO) throws Exception;
    
    /**
     * 根据用户ID查询系统日志
     * 
     * @param userId 用户ID
     * @return 系统日志列表
     * @throws Exception 统一异常
     */
    PageResult<SystemLog> getSystemLogByUserId(Long userId, Integer current, Integer size) throws Exception;
    
    /**
     * 根据物业公司ID查询系统日志
     * 
     * @param propertyCompanyId 物业公司ID
     * @param current 当前页
     * @param size 每页大小
     * @return 系统日志列表
     * @throws Exception 统一异常
     */
    PageResult<SystemLog> getSystemLogByPropertyCompanyId(Long propertyCompanyId, Integer current, Integer size) throws Exception;
    
    /**
     * 根据多个物业公司ID查询系统日志
     * 
     * @param propertyCompanyIds 物业公司ID列表
     * @param current 当前页
     * @param size 每页大小
     * @return 系统日志列表
     * @throws Exception 统一异常
     */
    PageResult<SystemLog> getSystemLogByPropertyCompanyIds(List<Long> propertyCompanyIds, Integer current, Integer size) throws Exception;

    /**
     * 分页查询系统日志（带数据权限控制）
     * 
     * @param queryDTO 查询条件
     * @return 分页结果
     * @throws Exception 统一异常
     */
    PageResult<SystemLog> getSystemLogPageWithPermission(SystemLogQueryDTO queryDTO) throws Exception;
    
    /**
     * 获取系统日志列表（用于导出）
     * 
     * @param queryDTO 查询条件
     * @return 系统日志列表
     * @throws Exception 统一异常
     */
    List<SystemLog> getSystemLogListForExport(SystemLogQueryDTO queryDTO) throws Exception;
    
    /**
     * 清空系统日志
     * 
     * @throws Exception 统一异常
     */
    void clearSystemLog() throws Exception;
}
